package com.AllenDuke.proxy;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import com.AllenDuke.tx.LogUtil;

import lombok.Setter;

//jdk动态代理类
@SuppressWarnings(value = { "all" }) // 忽略警告
public class LogProxy implements MethodInterceptor {

	@Setter
	private Object target;// 真实对象
	@Setter
	private LogUtil lu;// 日志能力

	// 创建一个代理对象
	public <T> T getProxy() {

		/*
		 * return (T) Proxy.newProxyInstance( // 类加载器，一般跟上真实对象的类加载器
		 * target.getClass().getClassLoader(), // 真实对象所实现的接口，jdk动态代理必须要求真实对象有接口
		 * target.getClass().getInterfaces(), // 事务增强的对象 this);
		 */
		return (T) Enhancer.create(target.getClass(), this);// 继承的类，,事务增强的对象,cjlib动态代理
	}

	public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
		// TODO Auto-generated method stub
		lu.writeLog(arg0.getClass().getName(), arg1.getName());
		return null;
	}

}
